Git常用命令总结

思维导图

一、 配置

1. config

(1) 配置作用域

  • –system:对系统所有登录的用户有效
  • –global:对当前用户所有仓库有效
  • –local:只对某个仓库有效
1
2
git config --global user.name 'your_name'
git config --global user.email 'your_email@domain.com'

(2) 配置查看

  • –list [–global | --local | --system]
1
2
git config --list
git config --list --global

(3) 配置命令别名

  • alias
1
git config --global alias.s status 

2. .gitignore文件

添加到暂存区时忽略此文件中所包含的文件。

  • *:任意
  • !:取反
  • **:多级
  • /:根目录

3. .gitkeeper文件

一个空文件,用来防止空文件夹被忽略

4 .git文件夹

(1) 文件

  • HEAD:存储当前分支的引用
  • config:存储local config

(2) 文件夹

  • refs
    • head:存储所有分支(commit)的引用
    • tags:存储所有的tag引用
  • objects:所有分支文件树(tree,blob,commit)
  • hooks:各种钩子函数,如pre-commit等钩子函数,需要手动安装,可以使用集成的husky包。配合eslint使用可以达到commit等命令的时候,检查代码。

(3) cat-file

  • 查看文件类型(commit | tag | tree | blob):git cat-file -t <hashID>
  • 查看文件内容:git cat-file -p <hashID>

5. SSH

1
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

二、 创建Git仓库

  1. 初始化:git init [project_name]
  2. 克隆:git clone <url>

三、 工作区

1. 工作区 -> 暂存区

  • 添加文件:
    • git add <file>:添加工作区文件 —> 暂存区
    • git add -u:更新已在暂存区中的文件
  • 更新暂存区文件名:git mv <old_file> <new_file>
  • 删除文件:git rm [--cached] <file>

2. stash

  • 存储当前工作区:git stash
  • 显示存储区记录列表:git stash list
  • 恢复存储区最新的一条记录:git stash apply
  • 删除存储区记录:git stash drop <stash@{}>
  • 恢复并删除存储区最新的一条记录:git stash pop

3. 撤销工作区的修改

  • git checkout -- <file>
  • git restore <file>

两种方式都可以,推荐使用restore。

四、暂存区

1. 暂存区 -> 本地仓库

  • git commit -m "description"

2. 撤销暂存区文件至工作区

  • git reset HEAD <file>:相当于git reset --mixed HEAD <file>
  • git restore --staged <file>

两种都可以,推荐使用restore

五、本地仓库

1. 修改最新一次commit的description

  • git commit --amend:相当于git reset --soft HEAD^ + git commit

2. 修改/合并commit

(1) git rebase -i <hashI>:hashID为要修改的commit的父hashID

  • r 修改历史commit的description

  • s 合并多个连续/非连续的commit

  • git rebase --abort:放弃rebase操作

(2) git rebase -i --root:修改第一次commit的description

(3) git rebase <branch_name>:将分支的分叉点移到最新的commit位置

如防止主分支log时分叉:

  • dev:git rebase master
  • master:git merge dev

3. 撤销commit

  • git reset --soft <hashID | HEAD^>:回到已经添加到暂存区的状态
  • git reset --mixed <hashID | HEAD^>:回到修改后的工作区的状态(如果不加 --mixed,则默认就是 --mixed)
  • git reset --hard <hashID | HEAD^>:回到未修改时工作区的状态

撤销reset操作:

  • git reflog查看
  • git reset <HEAD@{}>

4. 给commit设置标签

  • 查看标签:git tag
  • 添加标签:git tag <tag_version> [hashID]
  • 删除标签:git tag -d <tag_version>
  • 显示指定标签的commit信息:git show <tag_version>

六、工作区、暂存区和本地仓库的“观察者”

1. status

查看工作区和暂存区的状态:git status

2. log

查看commit日志:git log

  • git log --oneline:每条日志显示一行
  • git log -n2:显示最近2次的日志
  • git log -all:查看所有分支日志
  • git log --graph:图形化显示日志

美化log:git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

3. reflog

查看commit日志,包括删除的和reset的:git reflog

4. diff

(1) 工作区 VS 暂存区

  • git diff:比较工作区和暂存区之间的区别

  • git diff -- <file1> <file2>:比较工作区和暂存区之间某文件的区别

(2) 暂存区 VS commit

git diff --cached :比较暂存区和HEAD之间的区别

(3) commit VS commit

1
2
3
4
5
# 比较commit之间的区别
git diff <hashID1> <hashID2>
git diff HEAD HEAD^
git diff HEAD HEAD^^
git diff HEAD HEAD~2

(4) branch VS branch

git diff <branch_name1><branch_name2> -- <file1> <file2> :比较不同分支之间某个文件的区别

七、分支

1. branch

  • 创建分支:git branch <branch_name>
  • 删除分支:
    • git branch -d <branch_name>:普通删除分支
    • git branch -D <branch_name> :强制删除分支
  • 查看分支:
    • git branch:查看本地分支
    • git branch -v:查看本地分支及版本信息
    • git branch -a:查看本地+远程分支
    • git branch --merged:查看已合并到当前分支的分支
    • git branch --no-merged:查看未合并到当前分支的分支

2. checkout

  • 切换分支:git checkout <branch_name>
  • 创建并切换分支:git checkout -b <branch_name | tag>

3. merge

合并分支:git merge <branch_name>

八、远程仓库

1. remote

  • 查看添加的远程仓库:git remote -v
  • 添加远程仓库:git remote add <origin> <url>
  • 列出远程已经被删除但本地存在的分支:git remote prune origin --dry-run
  • 删除远程已经被删除但本地存在的分支:git remote prune origin

2. push

  • 首次推送并关联远程分支:git push -u <origin> <本地分支名>[:<远程分支名>]。 (-u 相当于 --set-upstream:关联本地的仓库分支和本地的远程仓库分支)
  • 推送并删除远程分支:git push <origin> --delete <branch_name>

3. fetch

拉取远程仓库到本地的远程仓库:git fetch <origin>/[branch]

4. pull

拉取远程仓库分支并合并到本地分支(相当于 fetch + merge):git pull <origin> <远程分支名>[:<本地分支名>]

九、可视化管理工具

安装完git之后,会提供一个自带的可视化管理工具,只需输入gitk -all命令即可打开。当然也有许多其他可视化工具,如sourcetree、tortoise等。